iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
DevOps

在OpenStack Neutron的ovn-networking裡挖呀挖呀挖系列 第 10

Day-10: OpenStack-OVN-主機 三者間的關係

  • 分享至 

  • xImage
  •  

昨天我們看到建立OpenStack的Netwok時,OVN其實也建立一個logical switch,所以OpenStack的網路模型與OVN,實際上是有著某種對應的關係;再加上我們之前學到的OVN相關的知識,在底層的主機上,在OVN的logical switch建立後,也會有相對應的bridge與port等資源被建立出來。我們把OpenStack-OVN-Host三種之間的關連一起呈現出來,我們今天就深入的看一下,OpenStack建立網路時,到底發生了什麼事情吧。

gh

gh


建立Network時

  1. 在openStack建立network後,產生一個network id為76af9b的Network,也可以看到有一個port, id為06ff4f。特別注意,因為Subnet還沒建立,所以目前還不知道Network會使用到的IP範.
# create network
openstack network create --provider-network-type local n1
openstack network list -f yaml | abbrev
- ID: 76af9b
  Name: n1
  Subnets: []
openstack port list -f yaml  | abbrev
- Fixed IP Addresses: []
  ID: 06ff4f
  MAC Address: fa:16:3e:44:1c:b4
  Name: ''
  Status: DOWN

在OVN上會建立一個logical switch。, 對應的OVN switch 名稱為neutron-76af9b,同時也有一個type為localport的port, 名稱為06ff4f. 此時可以看到,logical switch和logical port的名稱,和OpenStack上的Network與Port的名稱互相對應。以及Port的MAC address也是相同的。

ovn-nbctl show | abbrev
switch 1e1fc7 (neutron-76af9b) (aka n1)
    port 06ff4f
        type: localport
        addresses: ["fa:16:3e:44:1c:b4"]
  1. OpenStack 幫Netowork建立 Subnet, 再查看一次。
# create subnet
openstack subnet  create --subnet-range 172.16.100.0/24 --network n1 n1subnet

剛建立的Subnet, 已經綁定在Network n1上,同時剛剛還未取得IP的Port, 也從這個Subnet取得一個IP.

$ openstack network list -f yaml | abbrev
- ID: 76af9b
  Name: n1
  Subnets:
  - 363f1c
openstack port list -f yaml  | abbrev
- Fixed IP Addresses:
  - ip_address: 172.16.100.2
    subnet_id: 363f1c
  ID: 06ff4f
  MAC Address: fa:16:3e:44:1c:b4
  Name: ''
  Status: DOWN

再看一次logical switch,也確實看到localport Port也取得相同的IP。

ovn-nbctl show | abbrev

switch 1e1fc7 (neutron-76af9b) (aka n1)
    port 06ff4f
        type: localport
        addresses: ["fa:16:3e:44:1c:b4 172.16.100.2"]    

建立Instance時

  1. instance 建立後,Openstack的network上會多一個port, uuid為171d5d。同時也可以發現OVN的logical switch port也新增了一個171d5d port。
# 建立instance
IMAGE_ID=$(openstack image show cirros --format json | jq -r .id)
openstack server create --nic net-id=n1,v4-fixed-ip=172.16.100.10 --flavor m1.nano --image $IMAGE_ID vm_1
$ openstack port list -f yaml | abbrev

- Fixed IP Addresses:
  - ip_address: 172.16.100.10
    subnet_id: 363f1c
  ID: 171d5d
  MAC Address: fa:16:3e:d8:74:e8
  Name: ''
  Status: ACTIVE
- Fixed IP Addresses:
  - ip_address: 172.16.100.2
    subnet_id: 363f1c
  ID: 06ff4f
  MAC Address: fa:16:3e:44:1c:b4
  Name: ''
  Status: DOWN


$ ovn-nbctl show | abbrev
switch 1e1fc7 (neutron-76af9b) (aka n1)
    port 06ff4f
        type: localport
        addresses: ["fa:16:3e:44:1c:b4 172.16.100.2"]    
    port 171d5d
        addresses: ["fa:16:3e:d8:74:e8 172.16.100.10"]
  1. host上新增一了 tun 設備,名稱為tap171d5d09-bd 和openstack的port相呼應。這個名為tap171d5d09-bd的tun設備被掛到br-int上。
$ ip -c link show type tun

16: tap171d5d09-bd: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master ovs-system state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether fe:16:3e:a9:09:cd brd ff:ff:ff:ff:ff:ff

$ ovs-vsctl show
a43aeaaa-02cf-4c95-a4de-ff327c486f6d
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true
    Bridge br-int
        fail_mode: secure
        datapath_type: system
        Port tap53f016af-90
            Interface tap53f016af-90
        Port br-int
            Interface br-int
                type: internal
        Port tap171d5d09-bd
            Interface tap171d5d09-bd
    ovs_version: "2.17.4"

在介紹OVN時,我們都是用veth pair來模擬VM裡的NIC,實際上,OpenStack的instance,是使用主機上的tapxxxxxxxx-yy這個虛擬設備,做為VM的網路卡。

  1. 我們可以查看ovs上 針對tap171d5d09-bd 是和logical switch上的port 171d5d做綁定,於是vm 就加到logical switch上。這個綁定的動作,和[[Day-03_OVN-DHCP#logical switch 與 veth 之間的綁定]]的操作是一樣的,只是OpenStack已經幫我們做好綁定,這裡我們只是查詢tap171d5d09-bd和logical port 171d5d的關係。
$ ovs-vsctl list interface tap171d5d09-bd | abbrev |grep external_ids
external_ids        : {attached-mac="fa:16:3e:d8:74:e8", iface-id="171d5d", iface-status=active, ovn-installed="true", ovn-installed-ts="1668046019714", vm-uuid="9f7713"}

ovnmeta-xxxxx namespace

這今天的圖裡,在主機的br-int上,除了tapxxxxxxxx-yy 這個虛擬的tun網路設備外(綠色表示),還有另一種veth的虛擬設備(用黃色表示)存在。而veth會與一個名稱為ovnmeta-xxxxx的namespace連接。這個namespace的主要作用,是為了提供OpenStack裡的metadata service。至於metadata serivce,我們之後會再進一步分析。今天先來看一下ovnmeta-xxxxx的namespace是如何和logical switch建立起關連的吧。

ip -c link show type veth

tap76af9baf-90@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether ea:ae:de:7e:7f:4d brd ff:ff:ff:ff:ff:ff link-netns ovnmeta-738a1219-95ea-44bd-a080-148b11df1ee8
  1. 針對一個建立的network, 若host有連到此network的instance, 會在host上建一個ovnmeta-76af9b Linux namespace。
 ip netns
 
 ovnmeta-76af9baf-9fa4-4631-8f1d-5610ef87a036 (id: 0)
  1. 以及一對名為tap76af9b-XX的veth pair. 一端掛在ovnmeta-76af9b,另一端掛在br-int。
# 檢查 ovnmeta-76af9b內的link
$ ip netns  exec ovnmeta-76af9baf-9fa4-4631-8f1d-5610ef87a036 ip link
...
2: tap76af9baf-91@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:9d:cc:52 brd ff:ff:ff:ff:ff:ff link-netnsid 0 


$ ip link
...
17: tap76af9baf-90@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether 86:9f:7f:6e:50:b9 brd ff:ff:ff:ff:ff:ff link-netns ovnmeta-53f016af-9fa4-4631-8f1d-5610ef87a036

# tap76af9baf-91@if17 & tap76af9baf-90@if2 互為peer
# 檢查br-int上的port
$ ovs-vsctl show
a43aeaaa-02cf-4c95-a4de-ff327c486f6d
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true
    Bridge br-int
        fail_mode: secure
        datapath_type: system
        Port tap76af9baf-90
            Interface tap76af9baf-90
        Port br-int
            Interface br-int
                type: internal
  1. 我們可以查看ovs上 針對tap76af9baf-90 是和logical switch上的port 06ff4f做綁定,於是ovnmeta-76af9b namespace 就加到logical switch上
$ ovs-vsctl list interface tap76af9baf-90 | abbrev |grep external_ids
external_ids        : {iface-id="06ff4f"}

我們今天從OpenStack建立一個Network開始,將OpenStack Network與 OVN logical switch,及OVN logical switch 與 OpenVSwirch 的關係串連起來。現在,你應該已經知道,建立VM時,OpenStack實際上幫我們對OVN做了多少事情了吧。


上一篇
Day-09: 在OpenStack 上建立Network
下一篇
Day-11: Logical Flow tracing
系列文
在OpenStack Neutron的ovn-networking裡挖呀挖呀挖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言